热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

CSS>Flex布局中的放大和收缩计算

原文:https:dev.opera.comarticlesflexbox-basics译者注:本文仅简单翻译下原文中关于如何计算flex属性的值的部分。其他有关Flex布局的知识

原文:https://dev.opera.com/articles/flexbox-basics/

译者注:本文仅简单翻译下原文中关于如何计算 flex 属性的值的部分。其他有关 Flex 布局的知识本文不作探讨。

2015.12.5更新:关于 flex 不同的取值情况,以及 flex-basis 的取值意义,请参考我在这个问题中的回答:http://segmentfault.com/q/1010000004080910/a-1020000004100314

让你的元素伸缩

伸缩盒最强大的特性或许就在于能使得伸缩流方向中的子元素的长度(如果 flex-flowrow ,长度指 width,如果 flex-flowcolumn 则指 height)成为可伸缩量,该长度随伸缩流中父元素的可用空间量而变化。该特性通过使用 flex 属性实现,此属性的值由三部分构成。让咱们一个个地来添加这些部分同时观察其影响。首先,一个“伸缩放大系数 flex grow factor ”:

#first {flex: 1;}
#second {flex: 1;}
#third {flex: 1;}

这些无单位值用作比例——它们规定每个子元素应当占据父元素中的多少可用空间。如果都设置为 1,则在伸缩盒中的每个子元素将设为相等尺寸。如果给其中一个子元素赋值为 2,则该子元素将占据其他子元素的两倍空间,如下所示:

#first {flex: 1;}
#second {flex: 2;}
#third {flex: 1;}

你也可以为每个子元素设置一个伸缩基准值 flex basis,比如这样:

#first {flex: 1 200px;}
#second {flex: 2 300px;}
#third {flex: 1 250px;}

首先,根据伸缩流方向将伸缩基准值应用为每个子元素的宽度或高度。接着,根据伸缩放大系数,将父元素内剩余空间分配给子元素,得到子元素的最终宽度。据此当总共 750px 时,子元素主轴方向上尺寸为 200px,300px 和 250px。如果父容器主轴方向为 950px,那么将多出 200px 来分配给子元素。第一个和第三个子元素分别分配到 50px,因为其伸缩放大系数为 1,它们最终尺寸各为 250px 和 300px。第二个子元素将分配到 100px,因为其伸缩放大系数为 2。其最终尺寸为 400px。

flex 的第三部分值很少用到,但以防万一咱们还是看看。你也可以赋予你的子元素一个“伸缩收缩系数 flex shrink factor”,如下:

#first {flex: 1 1 400px;}
#second {flex: 2 3 600px;}
#third {flex: 1 2 400px;}

伸缩收缩系数,尽管称谓如此,但还是正值——即上述声明中的第二个无单位值。它们只有当子元素在主轴上溢出父容器的时候才会生效。它们也是作为比例值,但它们规定的是“溢出量”(子元素溢出父盒在之外的量)的比例,溢出量将从每个子元素的尺寸里面扣除,从而使得子元素总尺寸减少到和父元素的尺寸相等——实际上就是要阻止溢出。

我们来考虑主轴上 1100px 的父容器。这将造成我们上面的子元素溢出父容器 300px(子元素在主轴上总共是 1400px)。由于子元素上设置了伸缩收缩系数:

  • 第一个子元素将移除溢出量的 1/6,即 50px。其计算值因此变为 350px。

  • 第二个子元素将移除溢出量的 3/6,即 150px。其计算值因此变为 450px。

  • 第三个子元素将移除溢出量的 2/6,即 100px。其计算值因此变为 300px。

因此伸缩收缩系数越高元素反而越小。


推荐阅读
  • 每日前端实战:148# 视频教程展示纯 CSS 实现按钮两侧滑入装饰元素的悬停效果
    通过点击页面右侧的“预览”按钮,您可以直接在当前页面查看效果,或点击链接进入全屏预览模式。该视频教程展示了如何使用纯 CSS 实现按钮两侧滑入装饰元素的悬停效果。视频内容具有互动性,观众可以实时调整代码并观察变化。访问以下链接体验完整效果:https://codepen.io/comehope/pen/yRyOZr。 ... [详细]
  • 该问题可能由守护进程配置不当引起,例如未识别的JVM选项或内存分配不足。建议检查并调整JVM参数,确保为对象堆预留足够的内存空间(至少1572864KB)。此外,还可以优化应用程序的内存使用,减少不必要的内存消耗。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 为开发者提供了一系列实用的参考网站和资源链接,包括HTML速查手册( 和 ),帮助开发者快速查找和学习相关技术知识。此外,还涵盖了其他重要的开发工具和文档,为编程工作提供全面支持。 ... [详细]
  • 解决相对定位元素与 div 元素之间的重叠及遮挡问题
    在处理相对定位元素与 `div` 元素之间的重叠及遮挡问题时,首先需要深入理解 CSS 中不同 `position` 属性的用法及其含义。通过合理设置 `z-index`、`position` 和其他相关属性,可以有效避免元素间的相互干扰,确保页面布局的美观和功能性。建议开发者在实际应用中多加实践,掌握这些属性的综合运用技巧。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 在日常的项目开发中,测试环境和生产环境通常采用HTTP协议访问服务。然而,从浏览器的角度来看,这种访问方式会被标记为不安全。为了提升安全性,当前大多数生产环境已经转向了HTTPS协议。本文将详细介绍如何在Spring Boot应用中配置SSL证书,以实现HTTPS安全访问。通过这一过程,不仅可以增强数据传输的安全性,还能提高用户对系统的信任度。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 在同一个应用程序中,`Class JavaLaunchHelper` 存在多个实现版本,导致了 objc 系统报告冲突。具体表现为:objc[64179] 指出 `Class JavaLaunchHelper` 在两个不同的路径中被实现,这可能会影响应用程序的稳定性和性能。为了解决这一问题,建议检查并统一 `JavaLaunchHelper` 的实现版本,确保其唯一性。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
  • 如何在任意浏览器中轻松安装并使用VSCode——Codeserver简易指南
    code-server 是一款强大的工具,允许用户在任何服务器上部署 VSCode,并通过浏览器进行访问和使用。这一解决方案不仅简化了开发环境的搭建过程,还提供了高度灵活的工作方式。用户只需访问 GitHub 上的官方仓库(GitHub-coder/code-server),即可获取详细的安装和配置指南,快速启动并运行 code-server。无论是个人开发者还是团队协作,code-server 都能提供高效、便捷的代码编辑体验。 ... [详细]
  • 解题心得:UVA1339(逻辑分析与字符串处理+排序算法)
    解题心得:UVA1339(逻辑分析与字符串处理+排序算法) ... [详细]
author-avatar
天蝎樱花西街1992
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有